#ifndef _Program_H_
#define _Program_H_

#include <vector>
#include <list>
#include <deque>
#include <string>
#include <iostream>
#include <ostream>
#include "IVariableDict.h"
#include "InfoAnalizer.h"
#include "Commands.h"

class Program {
private:
  int id;
  bool workedInQuant; 
  
  std::list<AbstractCommand *> commands;
public:  
  int getId();
  
  void resetProgram();
  
  //id_ - index of program (more 0)
  Program(int id_, std::list<std::string>::const_iterator &start, const std::list<std::string>::const_iterator &end);

  bool isFinished();
  
  void makeTimeQuant(std::deque<int> &nextBlockCand, int &lockId, IVariableDict *variables, std::ostream &outStream);
};




#endif